#ifndef ORDERHISTORYWIDGET_H
#define ORDERHISTORYWIDGET_H

#include <QWidget>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QTableWidget>
#include <QTableWidgetItem>
#include <QHeaderView>
#include <QLabel>
#include <QPushButton>
#include <QComboBox>
#include <QDateEdit>
#include <QLineEdit>
#include <QGroupBox>
#include <QSplitter>
#include <QTextEdit>
#include <QProgressBar>
#include <QTimer>
#include <QMessageBox>
#include <QMenu>
#include <QAction>
#include <QDateTime>
#include "models.h"
#include "ordermanager.h"

// 使用命名空间
using namespace RestaurantSystem;

/**
 * @brief 订单历史管理组件
 * 
 * 提供用户订单历史查看功能：
 * - 订单列表显示和筛选
 * - 订单详情查看
 * - 订单状态跟踪
 * - 重新下单功能
 * - 1024*600分辨率优化
 */
class OrderHistoryWidget : public QWidget
{
    Q_OBJECT

public:
    explicit OrderHistoryWidget(QWidget *parent = nullptr);
    ~OrderHistoryWidget();

    /**
     * @brief 设置当前用户ID
     * @param userId 用户ID
     */
    void setUserId(const QString& userId);
    
    /**
     * @brief 刷新订单数据
     */
    void refreshOrders();
    
    /**
     * @brief 清空数据
     */
    void clearData();

signals:
    /**
     * @brief 重新下单请求信号
     * @param order 原订单信息
     */
    void reorderRequested(const Order& order);
    
    /**
     * @brief 数据刷新请求信号
     */
    void dataRefreshRequested();

public slots:
    /**
     * @brief 处理订单数据更新
     */
    void onOrdersUpdated();
    
    /**
     * @brief 处理操作错误
     * @param errorMessage 错误信息
     */
    void onOperationError(const QString& errorMessage);

private slots:
    /**
     * @brief 搜索按钮点击槽
     */
    void onSearchButtonClicked();
    
    /**
     * @brief 重置筛选按钮点击槽
     */
    void onResetFilterClicked();
    
    /**
     * @brief 刷新按钮点击槽
     */
    void onRefreshButtonClicked();
    
    /**
     * @brief 订单表格选择变化槽
     */
    void onOrderSelectionChanged();
    
    /**
     * @brief 订单表格双击槽
     * @param row 行号
     * @param column 列号
     */
    void onOrderTableDoubleClicked(int row, int column);
    
    /**
     * @brief 重新下单按钮点击槽
     */
    void onReorderButtonClicked();
    
    /**
     * @brief 导出按钮点击槽
     */
    void onExportButtonClicked();
    
    /**
     * @brief 状态筛选变化槽
     */
    void onStatusFilterChanged();
    
    /**
     * @brief 日期筛选变化槽
     */
    void onDateFilterChanged();
    
    /**
     * @brief 搜索文本变化槽
     */
    void onSearchTextChanged();
    
    /**
     * @brief 自动刷新定时器超时槽
     */
    void onAutoRefreshTimeout();

private:
    /**
     * @brief 初始化界面
     */
    void initializeUI();
    
    /**
     * @brief 创建筛选区域
     */
    void createFilterArea();
    
    /**
     * @brief 创建订单列表区域
     */
    void createOrderListArea();
    
    /**
     * @brief 创建订单详情区域
     */
    void createOrderDetailArea();
    
    /**
     * @brief 创建操作按钮区域
     */
    void createActionArea();
    
    /**
     * @brief 应用样式表
     */
    void applyStyleSheet();
    
    /**
     * @brief 设置表格属性
     */
    void setupTableProperties();
    
    /**
     * @brief 加载订单数据
     */
    void loadOrderData();
    
    /**
     * @brief 应用筛选条件
     */
    void applyFilters();
    
    /**
     * @brief 填充订单表格
     * @param orders 订单列表
     */
    void populateOrderTable(const QList<Order>& orders);
    
    /**
     * @brief 显示订单详情
     * @param order 订单信息
     */
    void displayOrderDetails(const Order& order);
    
    /**
     * @brief 清空订单详情
     */
    void clearOrderDetails();
    
    /**
     * @brief 更新界面状态
     */
    void updateUIState();
    
    /**
     * @brief 显示操作结果
     * @param message 结果信息
     * @param success 是否成功
     */
    void showOperationResult(const QString& message, bool success = true);
    
    /**
     * @brief 格式化订单状态
     * @param status 订单状态
     * @return 格式化后的状态文本
     */
    QString formatOrderStatus(OrderStatus status) const;
    
    /**
     * @brief 格式化金额
     * @param amount 金额
     * @return 格式化后的金额字符串
     */
    QString formatAmount(double amount) const;
    
    /**
     * @brief 格式化时间
     * @param dateTime 时间
     * @return 格式化后的时间字符串
     */
    QString formatDateTime(const QDateTime& dateTime) const;
    
    /**
     * @brief 筛选订单
     * @param orders 原始订单列表
     * @return 筛选后的订单列表
     */
    QList<Order> filterOrders(const QList<Order>& orders) const;
    
    /**
     * @brief 获取选中的订单
     * @return 选中的订单，未选中则返回无效订单
     */
    Order getSelectedOrder() const;
    
    /**
     * @brief 创建订单详情HTML
     * @param order 订单信息
     * @return HTML格式的详情文本
     */
    QString createOrderDetailHTML(const Order& order) const;

private:
    // 主布局
    QVBoxLayout* m_mainLayout;
    QSplitter* m_mainSplitter;
    
    // 筛选区域
    QGroupBox* m_filterGroup;
    QHBoxLayout* m_filterLayout;
    QLineEdit* m_searchEdit;
    QComboBox* m_statusFilter;
    QDateEdit* m_startDateEdit;
    QDateEdit* m_endDateEdit;
    QPushButton* m_searchButton;
    QPushButton* m_resetButton;
    QPushButton* m_refreshButton;
    
    // 订单列表区域
    QWidget* m_orderListWidget;
    QVBoxLayout* m_orderListLayout;
    QTableWidget* m_orderTable;
    QLabel* m_orderCountLabel;
    QProgressBar* m_loadingProgressBar;
    
    // 订单详情区域
    QGroupBox* m_detailGroup;
    QVBoxLayout* m_detailLayout;
    QTextEdit* m_detailTextEdit;
    
    // 操作按钮区域
    QGroupBox* m_actionGroup;
    QHBoxLayout* m_actionLayout;
    QPushButton* m_reorderButton;
    QPushButton* m_exportButton;
    
    // 状态标签已删除
    // QLabel* m_statusLabel;
    
    // 数据
    QString m_currentUserId;
    QList<Order> m_allOrders;
    QList<Order> m_filteredOrders;
    Order m_selectedOrder;
    
    // 业务对象
    OrderManager* m_orderManager;
    
    // 状态标志
    bool m_isInitialized;
    bool m_isLoading;
    bool m_autoRefreshEnabled;
    
    // 定时器
    QTimer* m_autoRefreshTimer;
    
    // 常量
    static const int AUTO_REFRESH_INTERVAL_MS = 30000; // 30秒自动刷新
    static const int STATUS_DISPLAY_MS = 3000;         // 状态显示3秒
    static const int TABLE_ROW_HEIGHT = 30;            // 表格行高
    
    // 表格列枚举
    enum OrderTableColumn {
        COL_ORDER_ID = 0,
        COL_CREATE_TIME,
        COL_STATUS,
        COL_TOTAL_AMOUNT,
        COL_ITEM_COUNT,
        COL_COUNT
    };
};

#endif // ORDERHISTORYWIDGET_H
